Описание
Задает или возвращает значение, указывающее, как конструируется
предложение WHERE для каждой записи в операции пакетного обновления, а
также следует ли в операции пакетного обновления использовать инструкцию
UPDATE или инструкцию DELETE с последующей инструкцией
INSERT (только в рабочей области ODBCDirect).
Значение
Задаваемое или возвращаемое значение имеет тип данных Long
и определяется с помощью следующих констант:
dbCriteriaKey (По умолчанию). Использование в предложении WHERE только ключевого столбца (столбцов). dbCriteriaModValues Использование в предложении WHERE ключевого столбца (столбцов) и всех обновляемых столбцов. dbCriteriaAllCols Использование в предложении WHERE ключевого столбца (столбцов) и всех столбцов. dbCriteriaTimeStamp Использование только столбца штампа времени, если имеется (если столбец штампа времени отсутствует в результирующем наборе записей, возникает ошибка выполнения). dbCriteriaDeleteInsert Использование набора инструкций DELETE и INSERT для каждого изменяемого столбца. dbCriteriaUpdate (По умолчанию). Использование инструкции UPDATE для каждого изменяемого столбца.
Замечания
При выполнении метода Update в пакетном режиме механизм
объектов доступа к данным (DAO) и библиотека пакетных указателей клиента
создают для выполнения требуемых изменений набор инструкций UPDATE языка
SQL. Для каждого обновления создается предложение WHERE, чтобы
изолировать записи, которые отмечены как измененные с помощью свойства
RecordStatus. Поскольку некоторые удаленные серверы используют триггеры
или другие средства обеспечения целостности данных, часто важно ограничить
обновляемые поля только теми, которые затрагиваются изменениями. Для этого
следует задать в свойстве UpdateOptions одну из следующих констант:
dbCriteriaKey,dbCriteriaModValues, dbCriteriaAllCols или
dbCriteriaTimeStamp. Это обеспечивает выполнение абсолютно минимального
количества программ триггеров. В результате, операция обновления выполняется
быстрее с потенциально меньшим количеством ошибок.
Допускается также
комбинирование этих констант с константой dbCriteriaDeleteInsert или
dbCriteriaUpdate. Последние определяют для каждого обновления либо
использование пары инструкций SQL DELETE и INSERT, либо инструкции
UPDATE при отправке пакета обновлений на сервер. В первом случае для
обновления записи требуются две отдельные операции. В некоторых случаях, в
особенности при реализации на удаленной системе триггеров DELETE,
INSERT и UPDATE, выбор правильного параметра UpdateOptions
позволяет существенно повысить быстродействие.
Если пользователь не задал ни
одну из констант, по умолчанию используются константы dbCriteriaUpdate и
dbCriteriaKey.
Для новых добавленных записей всегда генерируются
инструкции INSERT, а при удалении записей всегда генерируются инструкции
DELETE, поэтому данное свойство влияет только на обновления измененных
записей библиотекой указателей.
Пример
Следующая программа использует свойства BatchSize и
UpdateOptions для управления операциями пакетного обновления указанного
объекта Recordset.
Sub BatchSizeX() Dim wrkMain As Workspace Dim conMain As Connection Dim rstTemp As Recordset Set wrkMain = CreateWorkspace("ODBCWorkspace", "admin", "", dbUseODBC) ' Это значение свойства DefaultCursorDriver ' требуется для пакетного обновления. wrkMain.DefaultCursorDriver = dbUseClientBatchCursor Set conMain = wrkMain.OpenConnection("Publishers", dbDriverNoPrompt, False, "ODBC;DATABASE=pubs;UID=sa;PWD=;DSN=Publishers") ' Следующее значение аргумента блокировки ' требуется для пакетного обновления. Set rstTemp = conMain.OpenRecordset( "SELECT * FROM roysched", dbOpenDynaset, 0, dbOptimisticBatch) With rstTemp ' Увеличивает число инструкций, отправляемых на сервер ' в одной операции пакетного обновления, что приводит ' к уменьшению количества обращений к серверу. .BatchSize = 25 ' Изменяет значение свойства UpdateOptions таким образом, ' чтобы предложение WHERE любой инструкции в пакете, ' отправленном на сервер включало все обновляемые ' столбцы в дополнение к ключевым столбцам. Кроме того, ' любые изменения записей выполняются путем удаления ' исходной записи и добавления измененной версии записи ' вместо простого изменения исходной записи. .UpdateOptions = dbCriteriaModValues + dbCriteriaDeleteInsert ' Выполняет пакетное обновление с использованием ' заданных выше настроек. ' ... .Close End With conMain.Close wrkMain.Close End Sub